//package com.common.aop;
//
//import org.aspectj.lang.annotation.Aspect;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.aspectj.lang.ProceedingJoinPoint;
//import org.aspectj.lang.annotation.Around;
//import org.aspectj.lang.reflect.MethodSignature;
//import org.springframework.stereotype.Component;
//
//import java.util.Arrays;
//
//@Aspect
//@Component
//public class ServiceTimeAop {
//
//
//    private Logger logger = LoggerFactory.getLogger(getClass());
//
//    /**
//     * 只打印超出规定时间的方法
//     * 单位 ms 毫秒
//     */
//    private static final long TIME_LIMIT = 200;
//
//    /**
//     * 统计方法执行耗时Around环绕通知
//     * @param joinPoint
//     * @return
//     */
//    @Around("within(@org.springframework.stereotype.Service *)") //所有@Service注解的类都统计时长
//    public Object timeAround(ProceedingJoinPoint joinPoint) throws Throwable {
//
//        // 定义返回对象、得到方法需要的参数
//        Object obj = null;
//        Object[] args = joinPoint.getArgs();
//        long startTime = System.currentTimeMillis();
//
//        obj = joinPoint.proceed(args);
//        // 获取执行的方法名
//        long endTime = System.currentTimeMillis();
//        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
//        String methodName = signature.getDeclaringTypeName() + "." + signature.getName();
//        // 打印耗时的信息
//        this.printExecTime(methodName, Arrays.toString(joinPoint.getArgs()),startTime, endTime);
//
//        return obj;
//    }
//
//    /**
//     * 打印方法执行耗时的信息，如果超过了一定的时间，才打印
//     * @param methodName
//     * @param startTime
//     * @param endTime
//     */
//    private void printExecTime(String methodName,String param, long startTime, long endTime) {
//        long diffTime = endTime - startTime;
//        if (diffTime > TIME_LIMIT) {
//            //待改成写到数据库
//            logger.warn("-----" + methodName + ",参数："+param+" 方法执行耗时：" + diffTime + " ms");
//        }
//    }
//
//}
